/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * GestionPacientePresentacion.java
 *
 * Created on 29/11/2010, 09:53:08
 */

package presentacion;

import hibernate.objeto.DiagnosticoYTriageInternacion;
import presentacion.utilidad.BarMenu;
import presentacion.utilidad.PopUpMenu;
import hibernate.objeto.EnfermedadYDiagnosticoAmbulatorio;
import hibernate.objeto.Evolucion;
import hibernate.objeto.EvolucionEnfermeriaDeInternacion;
import hibernate.objeto.Paciente;
import java.awt.Component;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Vector;
import javax.swing.JMenu;
import javax.swing.RowFilter;
import javax.swing.table.TableRowSorter;
import logica.DiagnosticoYTriageInternacionLogica;
import logica.EnfermedadYDiagnosticoAmbulatorioLogica;
import logica.EvolucionEnfermeriaDeInternacionLogica;
import logica.EvolucionLogica;
import presentacion.acceso.RestriccionAcceso;
import presentacion.enfermedad_y_diagnostico.EnfermedadYDiagnosticoAmbulatorioPresentacion;
import presentacion.evolucion.EvolucionPresentacion;
import presentacion.enfermedad_y_diagnostico.DiagnosticoYTriageInternacionPresentacion;
import presentacion.evolucion.EpicrisisInternacionPresentacion;
import presentacion.evolucion.EvolucionEnfermeriaDeInternacionPresentacion;
import presentacion.utilidad.maquetado.Fuente;
import presentacion.utilidad.maquetado.Icono;
import presentacion.paciente.FichaMortalidadPacientePresentacion;
import presentacion.utilidad.MensajePresentacion;
import presentacion.utilidad.tabla.MiModeloTabla;

/**
 *
 * @author Gonzalo
 */
public class GestionPacientePresentacion extends javax.swing.JDialog {

    /** Creates new form GestionPacientePresentacion */
    public GestionPacientePresentacion(java.awt.Frame parent, boolean modal,
            Paciente pacienteAGestionar) {
        super(parent, modal);
        initComponents();
        
        paciente = pacienteAGestionar;
        
        personalizarGUI();
        setSize(CapaPresentacion.getTamañoMaximoJDialog());
        setearEventosQueCapturanTeclaEnterYEscape();
    }

    /**
     * Setea datos de la ventana.
     *
     */
    private void personalizarGUI() {
        //Barra de menu
        setJMenuBar(BarMenu.createMenuBarGestionPaciente(this));
            
        nombreYApellidoPaciente.setText(paciente.getIdPaciente() + " - " +
                CapaPresentacion.imprimirApellidoYNombrePersona(
                paciente.getPersona()));
        
        personalizarTipoDePracticaPorDefecto();
    }

    /**
     * Configura la ventana para setear por defecto el tipo de práctica.
     * En este caso se setea Ambulatorio.
     *
     */
    private void personalizarTipoDePracticaPorDefecto() {
        //Selecciona el boton ambulatorio
        botonAmbulatorio.setSelected(true);
        //Este método se encarga de configurar todo lo necesario según la práctica
        personalizarGUISegunTipoDePractica();
    }

    /**
     * Según el boton seleccionado, setea las distintas configuraciones de la
     * pantalla según se trate de  una práctica ambulatorio o bien una práctica
     * de internacion.
     *
     */
    private void personalizarGUISegunTipoDePractica() {
        if (esAmbulatorio()) {
            //AMBULATORIO
            botonAmbulatorio.requestFocus();
            //Barra de menu
            Component[] menuItems = this.getJMenuBar().getComponents();
            for (int i = 0; i < menuItems.length; i++) {
                if (((JMenu) menuItems[i]).getText().equalsIgnoreCase("HCA")) {
                    ((JMenu) menuItems[i]).setEnabled(true);
                } else if (((JMenu) menuItems[i]).getText().equalsIgnoreCase("Internación")) {
                    ((JMenu) menuItems[i]).setEnabled(false);
                }
            }

            //Botones de tipo de práctica
            botonAmbulatorio.setFont(
                    Fuente.FUENTE_BOTON_RESALTADO);
            botonInternacion.setFont(
                    Fuente.FUENTE_BOTON_EXTERNO);

            //Texto tablaEnfermedadYDiagnostico
            textoEnfermedadYDiagnostico.setText("Historia Clínica Ambulatoria");

            //Boton de agregar enfermedad/internación
            botonAgregarEnfermedad.setText("Agregar enfermedad");
            botonAgregarEnfermedad.setMnemonic('n');
            botonAgregarEnfermedad.setToolTipText("Agrega una nueva enfermedad");

            tablaEnfermedadYDiagnostico.setToolTipText(
                    "Selecciona la enfermedad a gestionar");

            cargarTablasAmbulatorio();

            panelEnfermeria.setVisible(false);
        } else {
            //INTERNACION
            botonInternacion.requestFocus();
            //Barra de menu
            Component[] menuItems = this.getJMenuBar().getComponents();
            for (int i = 0; i < menuItems.length; i++) {
                if (((JMenu) menuItems[i]).getText().equalsIgnoreCase("HCA")) {
                    ((JMenu) menuItems[i]).setEnabled(false);
                } else if (((JMenu) menuItems[i]).getText().equalsIgnoreCase("Internación")) {
                    ((JMenu) menuItems[i]).setEnabled(true);
                }
            }

            //Botones de tipo de práctica
            botonAmbulatorio.setFont(
                    Fuente.FUENTE_BOTON_EXTERNO);
            botonInternacion.setFont(
                    Fuente.FUENTE_BOTON_RESALTADO);

            //Texto tablaEnfermedadYDiagnostico
            textoEnfermedadYDiagnostico.setText("Episodios");

            //Boton de agregar enfermedad/internación
            botonAgregarEnfermedad.setText("Agregar internación");
            botonAgregarEnfermedad.setMnemonic('n');
            botonAgregarEnfermedad.setToolTipText("Agrega una nueva internación");

            tablaEnfermedadYDiagnostico.setToolTipText(
                    "Selecciona la internación a gestionar");

            cargarTablasInternacion();

            panelEnfermeria.setVisible(true);
        }
    }

    /**
     * Carga las tablas correspondiente a la práctica Ambulatorio de la pantalla.
     *
     */
    private void cargarTablasAmbulatorio() {
        //Carga tabla de Enfermedades
        cargarTablaEnfermedadYDiagnosticoAmbulatorio();

        //Carga tabla de Evoluciones
        cargarTablaEvolucionAmbulatorio();

        //Carga la descripcion
        cargarDescripcionEvolucion();
    }

    /**
     * Carga las tablas correspondiente a la práctica Internación de la pantalla.
     *
     */
    private void cargarTablasInternacion() {
        //Carga tabla de Diagnósticos
        cargarTablaDiagnosticoYTriageInternacion();

        //Carga tabla de Evoluciones
        cargarTablaEvolucionInternacion();

        //Carga tabla enfermería
        cargarTablaEnfermeriaInternacion();

        //Carga la descripcion
        cargarDescripcionEvolucion();
    }

    /**
     * Carga la tabla de Enfermedades con los objetos correspondientes a Ambulatorio.
     *
     */
    private void cargarTablaEnfermedadYDiagnosticoAmbulatorio() {
        //Carga tabla de Enfermedades
        Vector<EnfermedadYDiagnosticoAmbulatorio> vectorEnfermedadYDiagnosticoAmbulatorio =
                EnfermedadYDiagnosticoAmbulatorioLogica.
                getVectorEnfermedadYDiagnosticoAmbulatorioPorIdPaciente(
                paciente.getIdPaciente());

        MiModeloTabla.cargarTablaEnfermedadAmbulatorio(
                vectorEnfermedadYDiagnosticoAmbulatorio, null, null,
                tablaEnfermedadYDiagnostico);
        //Esconde la columna que contiene el vínculo
        tablaEnfermedadYDiagnostico.removeColumn(
                tablaEnfermedadYDiagnostico.getColumnModel().getColumn(2));
    }

    /**
     * arga la tabla de Evolución con los objetos correspondientes a Ambulatorio.
     *
     */
    private void cargarTablaEvolucionAmbulatorio() {
        //Recupera la enfermedad seleccionada
        EnfermedadYDiagnosticoAmbulatorio enfermedadYDiagnosticoAmbulatorio =
                (EnfermedadYDiagnosticoAmbulatorio)
                MiModeloTabla.recuperarObjetoDeTabla(
                EnfermedadYDiagnosticoAmbulatorio.class.getName(),
                tablaEnfermedadYDiagnostico);

        Vector<Evolucion> vectorEvolucionAmbulatorio = EvolucionLogica.
                getVectorEvolucionAmbulatorioPorIdPaciente(paciente.getIdPaciente());

        //Evoluciones para la determinada enfermedad
        if (enfermedadYDiagnosticoAmbulatorio != null) {
            MiModeloTabla.cargarTablaEvolucion(
                    EvolucionLogica.filtrarVectorEvolucionesPorEnfermedad(
                    vectorEvolucionAmbulatorio, enfermedadYDiagnosticoAmbulatorio),
                    tablaEvolucion);

            if (EvolucionLogica.filtrarVectorEvolucionesPorEnfermedad(
                    vectorEvolucionAmbulatorio, enfermedadYDiagnosticoAmbulatorio)
                    != null) {
                MiModeloTabla.seleccionarFilaDeTabla(
                        String.valueOf(EvolucionLogica.
                        filtrarVectorEvolucionesPorEnfermedad(
                        vectorEvolucionAmbulatorio, enfermedadYDiagnosticoAmbulatorio).
                        firstElement().getIdEvolucion()), tablaEvolucion, tablaEvolucionScrollPanel);
            }

        //Evoluciones para todas las enfermedades (si no hay ninguna seleccionada)
        } else {
            MiModeloTabla.cargarTablaEvolucion(vectorEvolucionAmbulatorio, tablaEvolucion);
            if (vectorEvolucionAmbulatorio != null) {
                MiModeloTabla.seleccionarFilaDeTabla(String.valueOf(
                    vectorEvolucionAmbulatorio.firstElement().getIdEvolucion()),
                    tablaEvolucion, tablaEvolucionScrollPanel);
            }
        }
    }

    /**
     * Carga la tabla de Diagnóstico con los objetos correspondientes a Internación.
     *
     */
    private void cargarTablaDiagnosticoYTriageInternacion() {
        //Carga tabla de Enfermedades
        Vector<DiagnosticoYTriageInternacion> vectorDiagnosticoYTriageInternacion =
                DiagnosticoYTriageInternacionLogica.
                getVectorDiagnosticoYTriageInternacionPorIdPaciente(
                paciente.getIdPaciente());

        MiModeloTabla.cargarTablaDiagnosticoYTriageInternacion(
                vectorDiagnosticoYTriageInternacion, tablaEnfermedadYDiagnostico);
    }

    /**
     * Carga la tabla de Evolución con los objetos correspondientes a Internación.
     *
     */
    private void cargarTablaEvolucionInternacion() {
        //Recupera la internacion seleccionada
        DiagnosticoYTriageInternacion diagnosticoYTriageInternacion =
                (DiagnosticoYTriageInternacion)
                MiModeloTabla.recuperarObjetoDeTabla(
                DiagnosticoYTriageInternacion.class.getName(),
                tablaEnfermedadYDiagnostico);

        Vector<Evolucion> vectorEvolucionInternacion = EvolucionLogica.
                getVectorEvolucionInternacionPorIdPaciente(paciente.getIdPaciente());

        //Evoluciones para la determinada internacion
        if (diagnosticoYTriageInternacion != null) {
            MiModeloTabla.cargarTablaEvolucion(
                    EvolucionLogica.filtrarVectorEvolucionesPorInternacion(
                    vectorEvolucionInternacion, diagnosticoYTriageInternacion),
                    tablaEvolucion);

            if (EvolucionLogica.filtrarVectorEvolucionesPorInternacion(
                    vectorEvolucionInternacion, diagnosticoYTriageInternacion)
                    != null) {
                MiModeloTabla.seleccionarFilaDeTabla(
                        String.valueOf(EvolucionLogica.
                        filtrarVectorEvolucionesPorInternacion(
                        vectorEvolucionInternacion, diagnosticoYTriageInternacion).
                        firstElement().getIdEvolucion()), tablaEvolucion, tablaEvolucionScrollPanel);
            }

        //Evoluciones para todas las enfermedades (si no hay ninguna seleccionada)
        } else {
            MiModeloTabla.cargarTablaEvolucion(vectorEvolucionInternacion, tablaEvolucion);
            if (vectorEvolucionInternacion != null) {
                MiModeloTabla.seleccionarFilaDeTabla(String.valueOf(
                        vectorEvolucionInternacion.firstElement().getIdEvolucion()),
                        tablaEvolucion, tablaEvolucionScrollPanel);
            }
        }
    }

    /**
     * Carga la tabla de Enfermeria con los objetos correspondientes a Internación.
     *
     */
    private void cargarTablaEnfermeriaInternacion() {
        //Recupera la internacion seleccionada
        DiagnosticoYTriageInternacion diagnosticoYTriageInternacion =
                (DiagnosticoYTriageInternacion)
                MiModeloTabla.recuperarObjetoDeTabla(
                DiagnosticoYTriageInternacion.class.getName(),
                tablaEnfermedadYDiagnostico);


        //Enfermeria para la determinada internacion
        if (diagnosticoYTriageInternacion != null) {
            MiModeloTabla.cargarTablaEvolucionEnfermeriaDeInternacion(
                    EvolucionEnfermeriaDeInternacionLogica.
                    getVectorEvolucionEnfermeriaDeInternacionPorIdDiagnosticoYTriageInternacion(
                    diagnosticoYTriageInternacion.getIdDiagnosticoYTriageInternacion()),
                    tablaEnfermeria);

        //Enfermeria para todas las internaciones (si no hay ninguna seleccionada)
        } else {
            MiModeloTabla.cargarTablaEvolucionEnfermeriaDeInternacion(
                    EvolucionEnfermeriaDeInternacionLogica.
                    getVectorEvolucionEnfermeriaDeInternacionPorIdPaciente(
                    paciente.getIdPaciente()),
                    tablaEnfermeria);
        }
    }

    /**
     * Carga la descripción de la evolución seleccionada. Tanto para las prácticas
     * de Ambulatorio o Internación.
     *
     */
    private void cargarDescripcionEvolucion() {
        Evolucion evolucion = (Evolucion) MiModeloTabla.
                recuperarObjetoDeTabla(Evolucion.class.getName(), tablaEvolucion);

        if (evolucion != null) {
            String textoAIncluir;
            if (esAmbulatorio()) {
                textoAIncluir = 
                        EvolucionLogica.getEvolucionHTML(
                        evolucion);
            } else {
                textoAIncluir =
                        EvolucionLogica.getEvolucionHTML(
                        evolucion);
            }

            descripcionEvolucion.setText(textoAIncluir);
        } else {
            descripcionEvolucion.setText(null);
        }
        descripcionEvolucion.setCaretPosition(0);
    }    

    /**
     * Carga la descripción de las evoluciónes enfermeria de internacion
     * correspondientes a una internacion.
     *
     */
    private void cargarDescripcionEnfermeria() {
        EvolucionEnfermeriaDeInternacion evolucionEnfermeriaDeInternacion = (EvolucionEnfermeriaDeInternacion) MiModeloTabla.
                recuperarObjetoDeTabla(EvolucionEnfermeriaDeInternacion.class.getName(), tablaEnfermeria);
            if (evolucionEnfermeriaDeInternacion != null) {
                String textoAIncluir = EvolucionEnfermeriaDeInternacionLogica.
                        getEvolucionEnfermeriaDeInternacionHTML(
                        evolucionEnfermeriaDeInternacion);

                descripcionEvolucion.setText(textoAIncluir);
            } else {
                descripcionEvolucion.setText(null);
            }
            descripcionEvolucion.setCaretPosition(0);
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        nombreYApellidoPaciente = new javax.swing.JLabel();
        separador1 = new javax.swing.JSeparator();
        textoEnfermedadYDiagnostico = new javax.swing.JLabel();
        botonAgregarEnfermedad = new javax.swing.JButton();
        textoFiltrarEnfermedad = new javax.swing.JLabel();
        filtrarEnfermedad = new javax.swing.JTextField();
        tablaEnfermedadYDiagnosticoScrollPanel = new javax.swing.JScrollPane();
        tablaEnfermedadYDiagnostico = new javax.swing.JTable(new MiModeloTabla());
        botonInternacion = new javax.swing.JToggleButton();
        botonAmbulatorio = new javax.swing.JToggleButton();
        panelEnfermeria = new javax.swing.JPanel();
        textoEnfermeria = new javax.swing.JLabel();
        filtrarEnfermeria = new javax.swing.JTextField();
        textoFiltrarEnfermeria = new javax.swing.JLabel();
        botonAgregarEnfermeria = new javax.swing.JButton();
        tablaEnfermeriaScrollPanel = new javax.swing.JScrollPane();
        tablaEnfermeria = new javax.swing.JTable(new MiModeloTabla());
        textoEvolucion = new javax.swing.JLabel();
        tablaEvolucionScrollPanel = new javax.swing.JScrollPane();
        tablaEvolucion = new javax.swing.JTable(new MiModeloTabla());
        botonAgregarEvolucion = new javax.swing.JButton();
        textoFiltrarEvolucion = new javax.swing.JLabel();
        filtrarEvolucion = new javax.swing.JTextField();
        panelVisualizador = new javax.swing.JPanel();
        botonDescripcionEvolucionAnterior = new javax.swing.JButton();
        botonDescripcionEvolucionSiguiente = new javax.swing.JButton();
        descripcionEvolucionScrollPanel = new javax.swing.JScrollPane();
        descripcionEvolucion = new javax.swing.JEditorPane();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Gestion de Paciente");
        setMinimumSize(new java.awt.Dimension(896, 350));
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosed(java.awt.event.WindowEvent evt) {
                formWindowClosed(evt);
            }
        });

        nombreYApellidoPaciente.setFont(Fuente.FUENTE_TITULO_1);
        nombreYApellidoPaciente.setForeground(Fuente.COLOR_NORMAL);
        nombreYApellidoPaciente.setPreferredSize(new java.awt.Dimension(688, 30));

        separador1.setPreferredSize(new java.awt.Dimension(1004, 5));

        textoEnfermedadYDiagnostico.setFont(Fuente.FUENTE_TITULO_2);
        textoEnfermedadYDiagnostico.setForeground(Fuente.COLOR_NORMAL);
        textoEnfermedadYDiagnostico.setPreferredSize(new java.awt.Dimension(489, 23));

        botonAgregarEnfermedad.setFont(Fuente.FUENTE_BOTON_INTERNO);
        botonAgregarEnfermedad.setForeground(Fuente.COLOR_NORMAL);
        botonAgregarEnfermedad.setIcon(Icono.ICONO_16_AGREGAR);
        botonAgregarEnfermedad.setToolTipText("");
        botonAgregarEnfermedad.setMaximumSize(new java.awt.Dimension(0, 0));
        botonAgregarEnfermedad.setMinimumSize(new java.awt.Dimension(0, 0));
        botonAgregarEnfermedad.setPreferredSize(new java.awt.Dimension(175, 20));
        botonAgregarEnfermedad.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonAgregarEnfermedadActionPerformed(evt);
            }
        });

        textoFiltrarEnfermedad.setFont(Fuente.FUENTE_LABEL);
        textoFiltrarEnfermedad.setForeground(Fuente.COLOR_NORMAL);
        textoFiltrarEnfermedad.setText("Filtrar");
        textoFiltrarEnfermedad.setPreferredSize(new java.awt.Dimension(28, 20));

        filtrarEnfermedad.setFont(Fuente.FUENTE_TEXTFIELD);
        filtrarEnfermedad.setForeground(Fuente.COLOR_NORMAL);
        filtrarEnfermedad.setToolTipText("Filtra los datos encontrados por algún criterio");
        filtrarEnfermedad.setMinimumSize(new java.awt.Dimension(0, 0));
        filtrarEnfermedad.setPreferredSize(new java.awt.Dimension(200, 20));
        filtrarEnfermedad.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                filtrarEnfermedadKeyReleased(evt);
            }
        });

        tablaEnfermedadYDiagnosticoScrollPanel.setMinimumSize(new java.awt.Dimension(0, 0));
        tablaEnfermedadYDiagnosticoScrollPanel.setPreferredSize(new java.awt.Dimension(489, 260));

        tablaEnfermedadYDiagnostico.setToolTipText("");
        tablaEnfermedadYDiagnostico.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tablaEnfermedadYDiagnosticoverCaracteristicasMouseClicked(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                tablaEnfermedadYDiagnosticoMouseReleased(evt);
            }
        });
        tablaEnfermedadYDiagnostico.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                tablaEnfermedadYDiagnosticoKeyReleased(evt);
            }
        });
        tablaEnfermedadYDiagnosticoScrollPanel.setViewportView(tablaEnfermedadYDiagnostico);
        MiModeloTabla.inicializarTabla(tablaEnfermedadYDiagnostico);

        botonInternacion.setFont(Fuente.FUENTE_BOTON_EXTERNO);
        botonInternacion.setForeground(Fuente.COLOR_NORMAL);
        botonInternacion.setMnemonic('i');
        botonInternacion.setText("Internación");
        botonInternacion.setToolTipText("Gestiona las internaciones del paciente");
        botonInternacion.setPreferredSize(new java.awt.Dimension(140, 30));
        botonInternacion.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonInternacionActionPerformed(evt);
            }
        });

        botonAmbulatorio.setFont(Fuente.FUENTE_BOTON_EXTERNO);
        botonAmbulatorio.setForeground(Fuente.COLOR_NORMAL);
        botonAmbulatorio.setMnemonic('m');
        botonAmbulatorio.setText("Ambulatorio");
        botonAmbulatorio.setToolTipText("Gestiona las enfermedades ambulatorias del paciente");
        botonAmbulatorio.setPreferredSize(new java.awt.Dimension(140, 30));
        botonAmbulatorio.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonAmbulatorioActionPerformed(evt);
            }
        });

        panelEnfermeria.setPreferredSize(new java.awt.Dimension(489, 305));

        textoEnfermeria.setFont(Fuente.FUENTE_TITULO_2);
        textoEnfermeria.setForeground(Fuente.COLOR_NORMAL);
        textoEnfermeria.setText("Enfermería");
        textoEnfermeria.setPreferredSize(new java.awt.Dimension(489, 23));

        filtrarEnfermeria.setFont(Fuente.FUENTE_TEXTFIELD);
        filtrarEnfermeria.setForeground(Fuente.COLOR_NORMAL);
        filtrarEnfermeria.setToolTipText("Filtra los datos encontrados por algún criterio");
        filtrarEnfermeria.setMinimumSize(new java.awt.Dimension(0, 0));
        filtrarEnfermeria.setPreferredSize(new java.awt.Dimension(200, 20));
        filtrarEnfermeria.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                filtrarEnfermeriaKeyReleased(evt);
            }
        });

        textoFiltrarEnfermeria.setFont(Fuente.FUENTE_LABEL);
        textoFiltrarEnfermeria.setForeground(Fuente.COLOR_NORMAL);
        textoFiltrarEnfermeria.setText("Filtrar");
        textoFiltrarEnfermeria.setPreferredSize(new java.awt.Dimension(28, 20));

        botonAgregarEnfermeria.setFont(Fuente.FUENTE_BOTON_INTERNO);
        botonAgregarEnfermeria.setForeground(Fuente.COLOR_NORMAL);
        botonAgregarEnfermeria.setIcon(Icono.ICONO_16_AGREGAR);
        botonAgregarEnfermeria.setMnemonic('v');
        botonAgregarEnfermeria.setText("Agregar enfermería");
        botonAgregarEnfermeria.setToolTipText("Agrega una nueva evolución");
        botonAgregarEnfermeria.setMaximumSize(new java.awt.Dimension(0, 0));
        botonAgregarEnfermeria.setMinimumSize(new java.awt.Dimension(0, 0));
        botonAgregarEnfermeria.setPreferredSize(new java.awt.Dimension(175, 20));
        botonAgregarEnfermeria.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonAgregarEnfermeriaActionPerformed(evt);
            }
        });

        tablaEnfermeriaScrollPanel.setMinimumSize(new java.awt.Dimension(0, 0));
        tablaEnfermeriaScrollPanel.setPreferredSize(new java.awt.Dimension(489, 260));

        tablaEnfermeria.setToolTipText("Seleccione la evolución de enfermería para ver sus detalles");
        tablaEnfermeria.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tablaEnfermeriaMouseClicked(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                tablaEnfermeriaMouseReleased(evt);
            }
        });
        tablaEnfermeria.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                tablaEnfermeriaKeyReleased(evt);
            }
        });
        tablaEnfermeriaScrollPanel.setViewportView(tablaEnfermeria);
        MiModeloTabla.inicializarTabla(tablaEnfermeria);

        javax.swing.GroupLayout panelEnfermeriaLayout = new javax.swing.GroupLayout(panelEnfermeria);
        panelEnfermeria.setLayout(panelEnfermeriaLayout);
        panelEnfermeriaLayout.setHorizontalGroup(
            panelEnfermeriaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(textoEnfermeria, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addGroup(panelEnfermeriaLayout.createSequentialGroup()
                .addComponent(botonAgregarEnfermeria, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 82, Short.MAX_VALUE)
                .addComponent(textoFiltrarEnfermeria, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(filtrarEnfermeria, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
            .addComponent(tablaEnfermeriaScrollPanel, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
        panelEnfermeriaLayout.setVerticalGroup(
            panelEnfermeriaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelEnfermeriaLayout.createSequentialGroup()
                .addComponent(textoEnfermeria, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(panelEnfermeriaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(botonAgregarEnfermeria, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(filtrarEnfermeria, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textoFiltrarEnfermeria, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(tablaEnfermeriaScrollPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 260, Short.MAX_VALUE))
        );

        textoEvolucion.setFont(Fuente.FUENTE_TITULO_2);
        textoEvolucion.setForeground(Fuente.COLOR_NORMAL);
        textoEvolucion.setText("Evoluciones");
        textoEvolucion.setPreferredSize(new java.awt.Dimension(489, 23));

        tablaEvolucionScrollPanel.setMinimumSize(new java.awt.Dimension(0, 0));
        tablaEvolucionScrollPanel.setPreferredSize(new java.awt.Dimension(489, 260));

        tablaEvolucion.setToolTipText("Seleccione la evolución a gestionar");
        tablaEvolucion.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tablaEvolucionMouseClicked(evt);
            }
        });
        tablaEvolucion.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                tablaEvolucionKeyReleased(evt);
            }
        });
        tablaEvolucionScrollPanel.setViewportView(tablaEvolucion);
        MiModeloTabla.inicializarTabla(tablaEvolucion);

        botonAgregarEvolucion.setFont(Fuente.FUENTE_BOTON_INTERNO);
        botonAgregarEvolucion.setForeground(Fuente.COLOR_NORMAL);
        botonAgregarEvolucion.setIcon(Icono.ICONO_16_AGREGAR);
        botonAgregarEvolucion.setMnemonic('v');
        botonAgregarEvolucion.setText("Agregar evolución");
        botonAgregarEvolucion.setToolTipText("Agrega una nueva evolución");
        botonAgregarEvolucion.setPreferredSize(new java.awt.Dimension(175, 20));
        botonAgregarEvolucion.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonAgregarEvolucionActionPerformed(evt);
            }
        });

        textoFiltrarEvolucion.setFont(Fuente.FUENTE_LABEL);
        textoFiltrarEvolucion.setForeground(Fuente.COLOR_NORMAL);
        textoFiltrarEvolucion.setText("Filtrar");
        textoFiltrarEvolucion.setPreferredSize(new java.awt.Dimension(28, 20));

        filtrarEvolucion.setFont(Fuente.FUENTE_TEXTFIELD);
        filtrarEvolucion.setForeground(Fuente.COLOR_NORMAL);
        filtrarEvolucion.setToolTipText("Filtra los datos encontrados por algún criterio");
        filtrarEvolucion.setMinimumSize(new java.awt.Dimension(0, 0));
        filtrarEvolucion.setPreferredSize(new java.awt.Dimension(200, 20));
        filtrarEvolucion.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                filtrarEvolucionKeyReleased(evt);
            }
        });

        botonDescripcionEvolucionAnterior.setIcon(Icono.ICONO_16_ANTERIOR);
        botonDescripcionEvolucionAnterior.setToolTipText("Muestra la descripción de la evolución anterior");
        botonDescripcionEvolucionAnterior.setMinimumSize(new java.awt.Dimension(0, 0));
        botonDescripcionEvolucionAnterior.setPreferredSize(new java.awt.Dimension(42, 23));
        botonDescripcionEvolucionAnterior.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonDescripcionEvolucionAnteriorActionPerformed(evt);
            }
        });

        botonDescripcionEvolucionSiguiente.setIcon(Icono.ICONO_16_SIGUIENTE);
        botonDescripcionEvolucionSiguiente.setToolTipText("Muestra la descripción de la evolución siguiente");
        botonDescripcionEvolucionSiguiente.setMinimumSize(new java.awt.Dimension(0, 0));
        botonDescripcionEvolucionSiguiente.setPreferredSize(new java.awt.Dimension(42, 23));
        botonDescripcionEvolucionSiguiente.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonDescripcionEvolucionSiguienteActionPerformed(evt);
            }
        });

        descripcionEvolucionScrollPanel.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        descripcionEvolucionScrollPanel.setAutoscrolls(true);
        descripcionEvolucionScrollPanel.setMinimumSize(new java.awt.Dimension(0, 0));
        descripcionEvolucionScrollPanel.setPreferredSize(new java.awt.Dimension(489, 291));

        descripcionEvolucion.setContentType("text/html");
        descripcionEvolucion.setEditable(false);
        descripcionEvolucion.setFont(Fuente.FUENTE_TEXTFIELD);
        descripcionEvolucion.setForeground(Fuente.COLOR_NORMAL);
        descripcionEvolucion.setText("<html>    <head>      </head>    <body>      <p style=\"margin-top: 0\">              </p>    </body>  </html>  ");
        descripcionEvolucion.setFocusable(false);
        descripcionEvolucion.setMinimumSize(new java.awt.Dimension(0, 0));
        descripcionEvolucion.setPreferredSize(new java.awt.Dimension(497, 220));
        descripcionEvolucionScrollPanel.setViewportView(descripcionEvolucion);

        javax.swing.GroupLayout panelVisualizadorLayout = new javax.swing.GroupLayout(panelVisualizador);
        panelVisualizador.setLayout(panelVisualizadorLayout);
        panelVisualizadorLayout.setHorizontalGroup(
            panelVisualizadorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelVisualizadorLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(botonDescripcionEvolucionAnterior, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(botonDescripcionEvolucionSiguiente, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
            .addComponent(descripcionEvolucionScrollPanel, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
        panelVisualizadorLayout.setVerticalGroup(
            panelVisualizadorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelVisualizadorLayout.createSequentialGroup()
                .addGroup(panelVisualizadorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(botonDescripcionEvolucionAnterior, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(botonDescripcionEvolucionSiguiente, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(descripcionEvolucionScrollPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(separador1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addComponent(nombreYApellidoPaciente, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addGap(18, 18, 18)
                        .addComponent(botonAmbulatorio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addComponent(botonInternacion, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(botonAgregarEvolucion, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 82, Short.MAX_VALUE)
                                .addComponent(textoFiltrarEvolucion, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(filtrarEvolucion, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addComponent(textoEvolucion, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(tablaEnfermedadYDiagnosticoScrollPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(botonAgregarEnfermedad, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 82, Short.MAX_VALUE)
                                .addComponent(textoFiltrarEnfermedad, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(filtrarEnfermedad, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addComponent(textoEnfermedadYDiagnostico, javax.swing.GroupLayout.PREFERRED_SIZE, 195, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(tablaEvolucionScrollPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                        .addGap(26, 26, 26)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(panelEnfermeria, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(panelVisualizador, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(botonInternacion, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(botonAmbulatorio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(nombreYApellidoPaciente, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(separador1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(textoEnfermedadYDiagnostico, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(botonAgregarEnfermedad, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                .addComponent(filtrarEnfermedad, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addComponent(textoFiltrarEnfermedad, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(tablaEnfermedadYDiagnosticoScrollPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(textoEvolucion, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(botonAgregarEvolucion, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(filtrarEvolucion, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(textoFiltrarEvolucion, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(tablaEvolucionScrollPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(panelEnfermeria, javax.swing.GroupLayout.DEFAULT_SIZE, 320, Short.MAX_VALUE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(panelVisualizador, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
                .addContainerGap())
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void tablaEvolucionMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tablaEvolucionMouseClicked
        if (evt.getClickCount() == 2 && evt.getButton() == 1) {
            propiedadesEvolucion();
        } else if (evt.getButton() == 3) {
            PopUpMenu.createPopupMenuEvolucion(
                    tablaEvolucion, this);
        }
        tablaEnfermeria.clearSelection();
        cargarDescripcionEvolucion();
}//GEN-LAST:event_tablaEvolucionMouseClicked

    private void tablaEvolucionKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_tablaEvolucionKeyReleased
        if (evt.getKeyCode() == KeyEvent.VK_UP
                || evt.getKeyCode() == KeyEvent.VK_DOWN) {
            cargarDescripcionEvolucion();
        } else if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            propiedadesEvolucion();
        }
}//GEN-LAST:event_tablaEvolucionKeyReleased

    private void botonAgregarEvolucionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonAgregarEvolucionActionPerformed
        agregarEvolucion();
}//GEN-LAST:event_botonAgregarEvolucionActionPerformed

    private void filtrarEvolucionKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_filtrarEvolucionKeyReleased
        TableRowSorter<MiModeloTabla> sorter = new TableRowSorter<MiModeloTabla>(
                (MiModeloTabla) tablaEvolucion.getModel());

        tablaEvolucion.setRowSorter(sorter);
        String texto = filtrarEvolucion.getText();
        if (texto.length() == 0) {
            sorter.setRowFilter(null);
        } else {
            sorter.setRowFilter(RowFilter.regexFilter("(?i).*" + texto + ".*"));
        }
}//GEN-LAST:event_filtrarEvolucionKeyReleased

    private void botonDescripcionEvolucionAnteriorActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonDescripcionEvolucionAnteriorActionPerformed
        MiModeloTabla.seleccionarFilaAnterior(
                Evolucion.class.getName(), tablaEvolucion);
        cargarDescripcionEvolucion();
}//GEN-LAST:event_botonDescripcionEvolucionAnteriorActionPerformed

    private void botonDescripcionEvolucionSiguienteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonDescripcionEvolucionSiguienteActionPerformed
        MiModeloTabla.seleccionarFilaSiguiente(
                Evolucion.class.getName(), tablaEvolucion);
        cargarDescripcionEvolucion();
}//GEN-LAST:event_botonDescripcionEvolucionSiguienteActionPerformed

    private void tablaEnfermedadYDiagnosticoverCaracteristicasMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tablaEnfermedadYDiagnosticoverCaracteristicasMouseClicked
        if (esAmbulatorio()) {
        //Ambulatorio
            if (evt.getClickCount() == 2 && evt.getButton() == 1) {
                propiedadesEnfermedadAmbulatorio();
            } else {
                PopUpMenu.crearPopupMenuEnfermedadYDiagnosticoAmbulatorio(
                        tablaEnfermedadYDiagnostico, this);
            }
        } else {
        //Internacion
            if (evt.getClickCount() == 2 && evt.getButton() == 1) {
                propiedadesDiagnosticoInternacion();
            } else {
                PopUpMenu.crearPopupMenuDiagnosticoYTriageInternacion(
                        tablaEnfermedadYDiagnostico, this);
            }
        }
}//GEN-LAST:event_tablaEnfermedadYDiagnosticoverCaracteristicasMouseClicked

    private void filtrarEnfermedadKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_filtrarEnfermedadKeyReleased
        TableRowSorter<MiModeloTabla> sorter = new TableRowSorter<MiModeloTabla>(
                (MiModeloTabla) tablaEnfermedadYDiagnostico.getModel());

        tablaEnfermedadYDiagnostico.setRowSorter(sorter);
        String texto = filtrarEnfermedad.getText();
        if (texto.length() == 0) {
            sorter.setRowFilter(null);
        } else {
            sorter.setRowFilter(RowFilter.regexFilter("(?i).*" + texto + ".*"));
        }

}//GEN-LAST:event_filtrarEnfermedadKeyReleased

    private void tablaEnfermedadYDiagnosticoMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tablaEnfermedadYDiagnosticoMouseReleased
        if (esAmbulatorio()) {
            if (evt.getButton() == 1) {
                cargarTablaEvolucionAmbulatorio();
            }
        } else {
            if (evt.getButton() == 1) {
                cargarTablaEvolucionInternacion();
                cargarTablaEnfermeriaInternacion();
            }
        }
        
        cargarDescripcionEvolucion();
    }//GEN-LAST:event_tablaEnfermedadYDiagnosticoMouseReleased

    private void tablaEnfermedadYDiagnosticoKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_tablaEnfermedadYDiagnosticoKeyReleased
        if (esAmbulatorio()) {
            if (evt.getKeyCode() == KeyEvent.VK_UP ||
                    evt.getKeyCode() == KeyEvent.VK_DOWN) {
                cargarTablaEvolucionAmbulatorio();
            } else if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
                propiedadesEnfermedadAmbulatorio();

            }
        } else {
            if (evt.getKeyCode() == KeyEvent.VK_UP ||
                    evt.getKeyCode() == KeyEvent.VK_DOWN) {
                cargarTablaEvolucionInternacion();
                cargarTablaEnfermeriaInternacion();
            } else if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
                propiedadesDiagnosticoInternacion();
            }
        }
    }//GEN-LAST:event_tablaEnfermedadYDiagnosticoKeyReleased

    private void botonAgregarEnfermedadActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonAgregarEnfermedadActionPerformed
        agregarEnfermedad();
}//GEN-LAST:event_botonAgregarEnfermedadActionPerformed

    private void botonAmbulatorioActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonAmbulatorioActionPerformed
        if (botonAmbulatorio.isSelected()) {
            botonAmbulatorio.setSelected(true);
            botonInternacion.setSelected(false);
        } else if (!botonAmbulatorio.isSelected() && botonInternacion.isSelected()) {
            botonAmbulatorio.setSelected(false);
            botonInternacion.setSelected(true);
        } else if (!botonAmbulatorio.isSelected() && !botonInternacion.isSelected()) {
            botonAmbulatorio.setSelected(true);
        }
        personalizarGUISegunTipoDePractica();
    }//GEN-LAST:event_botonAmbulatorioActionPerformed

    private void botonInternacionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonInternacionActionPerformed
        if (botonInternacion.isSelected()) {
            botonAmbulatorio.setSelected(false);
            botonInternacion.setSelected(true);
        } else if (!botonInternacion.isSelected() && botonAmbulatorio.isSelected()) {
            botonAmbulatorio.setSelected(true);
            botonInternacion.setSelected(false);
        } else if (!botonInternacion.isSelected() && !botonAmbulatorio.isSelected()) {
            botonInternacion.setSelected(true);
        }
        personalizarGUISegunTipoDePractica();
    }//GEN-LAST:event_botonInternacionActionPerformed
    
    private void filtrarEnfermeriaKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_filtrarEnfermeriaKeyReleased
        TableRowSorter<MiModeloTabla> sorter = new TableRowSorter<MiModeloTabla>(
                (MiModeloTabla) tablaEnfermeria.getModel());

        tablaEnfermeria.setRowSorter(sorter);
        String texto = filtrarEnfermeria.getText();
        if (texto.length() == 0) {
            sorter.setRowFilter(null);
        } else {
            sorter.setRowFilter(RowFilter.regexFilter("(?i).*" + texto + ".*"));
        }
    }//GEN-LAST:event_filtrarEnfermeriaKeyReleased

    private void botonAgregarEnfermeriaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonAgregarEnfermeriaActionPerformed
        agregarEvolucionEnfermeriaDeInternacion();
    }//GEN-LAST:event_botonAgregarEnfermeriaActionPerformed

    private void tablaEnfermeriaMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tablaEnfermeriaMouseClicked
        if (evt.getClickCount() == 2 && evt.getButton() == 1) {
                propiedadesEvolucionEnfermeriaDeInternacion();
            } else {
                PopUpMenu.crearPopupMenuEvolucionEnfermeriaDeInternacion(
                        tablaEnfermeria, this);
            }
    }//GEN-LAST:event_tablaEnfermeriaMouseClicked

    private void tablaEnfermeriaKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_tablaEnfermeriaKeyReleased
        if (evt.getKeyCode() == KeyEvent.VK_UP ||
                    evt.getKeyCode() == KeyEvent.VK_DOWN) {
                cargarDescripcionEnfermeria();
            } else if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
                propiedadesEvolucionEnfermeriaDeInternacion();
            }
    }//GEN-LAST:event_tablaEnfermeriaKeyReleased

    private void tablaEnfermeriaMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tablaEnfermeriaMouseReleased
        if (evt.getButton() == 1) {
                tablaEvolucion.clearSelection();
                cargarDescripcionEnfermeria();
            }
    }//GEN-LAST:event_tablaEnfermeriaMouseReleased

    private void formWindowClosed(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosed
        paciente = null;
    }//GEN-LAST:event_formWindowClosed
    
    /**
     * Visualiza los datos personales del paciente.
     *
     * @param paciente
     */
    public void propiedadesPaciente() {
        RestriccionAcceso.PacientePresentacion(null, true, paciente);
        //Actualiza si se modificó el nombre
        nombreYApellidoPaciente.setText(paciente.getIdPaciente() + " - " +
                CapaPresentacion.imprimirApellidoYNombrePersona(
                paciente.getPersona()));
    }

    /**
     * Abre la Información Social del paciente.
     *
     */
    public void informacionSocial() {
        RestriccionAcceso.InformacionSocialPacientePresentacion(
                    null, true, paciente.getInformacionSocial());
    }
    
    /**
     * Abre la Ficha de Mortalidad del paciente.
     *
     */
    public void fichaMortalidadPaciente() {
        RestriccionAcceso.FichaMortalidadPacientePresentacion(null, true);
        
        //Si se cargó correctamente se sale
        if (FichaMortalidadPacientePresentacion.seCargoFichaMortalidad()) {
            dispose();
        }
    }

    /**
     * Abre los antecedentes del paciente.
     *
     */
    public void antecedentes() {
        RestriccionAcceso.AntecedentePacientePresentacion(null, true);
    }
    
    /**
     * Gesiona las aplicaciones de vacunas del paciente.
     *
     */
    public void gestionVacuna() {
        RestriccionAcceso.AplicacionVacunaPresentacion(
                null, true);
    }

    /**
     * Abre los detalle de la enfermedad ambulatorio.
     *
     */
    public void propiedadesEnfermedadAmbulatorio() {
        EnfermedadYDiagnosticoAmbulatorio enfermedadYDiagnosticoAmbulatorio =
                (EnfermedadYDiagnosticoAmbulatorio)
                MiModeloTabla.recuperarObjetoDeTabla(
                EnfermedadYDiagnosticoAmbulatorio.class.getName(),
                tablaEnfermedadYDiagnostico);

        if (enfermedadYDiagnosticoAmbulatorio != null) {
            RestriccionAcceso.EnfermedadYDiagnosticoAmbulatorioPresentacion(
                null, true, enfermedadYDiagnosticoAmbulatorio);

            //Si se agregó la enfermedad
        if (EnfermedadYDiagnosticoAmbulatorioPresentacion.
                getEnfermedadYDiagnostico() != null) {

                cargarTablaEnfermedadYDiagnosticoAmbulatorio();

                MiModeloTabla.seleccionarFilaDeTabla(
                        String.valueOf(EnfermedadYDiagnosticoAmbulatorioPresentacion.
                        getEnfermedadYDiagnostico().getIdEnfermedadYDiagnosticoAmbulatorio()),
                        tablaEnfermedadYDiagnostico, tablaEnfermedadYDiagnosticoScrollPanel);

                cargarTablaEvolucionAmbulatorio();
                cargarDescripcionEvolucion();
            }
        }
    }

    /**
     * Abre los detalle del diagnóstico de internación.
     *
     */
    public void propiedadesDiagnosticoInternacion() {
        DiagnosticoYTriageInternacion diagnosticoYTriageInternacion =
                (DiagnosticoYTriageInternacion)
                MiModeloTabla.recuperarObjetoDeTabla(
                DiagnosticoYTriageInternacion.class.getName(),
                tablaEnfermedadYDiagnostico);

        if (diagnosticoYTriageInternacion != null) {
            RestriccionAcceso.DiagnosticoYTriageInternacionPresentacion(
                null, true, diagnosticoYTriageInternacion);

            //Si se agregó la internacion
        if (DiagnosticoYTriageInternacionPresentacion.
                getDiagnosticoYTriageInternacion() != null) {
                cargarTablaDiagnosticoYTriageInternacion();

                MiModeloTabla.seleccionarFilaDeTabla(
                        String.valueOf(DiagnosticoYTriageInternacionPresentacion.
                        getDiagnosticoYTriageInternacion().getIdDiagnosticoYTriageInternacion()),
                        tablaEnfermedadYDiagnostico, tablaEnfermedadYDiagnosticoScrollPanel);
                cargarTablaEvolucionInternacion();
                cargarTablaEnfermeriaInternacion();
                cargarDescripcionEvolucion();
            }

        }
    }

    /**
     * Agrega una enfermedad al paciente.
     *
     */
    public void agregarEnfermedad() {
        if (esAmbulatorio()) {
            agregarEnfermedadAmbulatorio();
        } else {
            agregarDiagnosticoInternacion();
        }
    }

    /**
     * Abre la ventana de agregar la enfermedad ambulatorio.
     *
     */
    private void agregarEnfermedadAmbulatorio() {
        RestriccionAcceso.EnfermedadYDiagnosticoAmbulatorioPresentacion(
                null, true, null);

        //Si se agregó la enfermedad
        if (EnfermedadYDiagnosticoAmbulatorioPresentacion.
                getEnfermedadYDiagnostico() != null) {

            cargarTablaEnfermedadYDiagnosticoAmbulatorio();

            MiModeloTabla.seleccionarFilaDeTabla(
                    String.valueOf(EnfermedadYDiagnosticoAmbulatorioPresentacion.
                    getEnfermedadYDiagnostico().getIdEnfermedadYDiagnosticoAmbulatorio()),
                    tablaEnfermedadYDiagnostico, tablaEnfermedadYDiagnosticoScrollPanel);

            cargarTablaEvolucionAmbulatorio();
            cargarDescripcionEvolucion();
        }
    }

    /**
     * Abre la ventana de agregar la internacion.
     *
     */
    private void agregarDiagnosticoInternacion() {
        RestriccionAcceso.DiagnosticoYTriageInternacionPresentacion(
                null, true, null);
        //Si se agregó la internacion
        if (DiagnosticoYTriageInternacionPresentacion.
                getDiagnosticoYTriageInternacion() != null) {
            cargarTablaDiagnosticoYTriageInternacion();

            MiModeloTabla.seleccionarFilaDeTabla(
                    String.valueOf(DiagnosticoYTriageInternacionPresentacion.
                    getDiagnosticoYTriageInternacion().getIdDiagnosticoYTriageInternacion()),
                    tablaEnfermedadYDiagnostico, tablaEnfermedadYDiagnosticoScrollPanel);
            cargarTablaEvolucionInternacion();
            cargarDescripcionEvolucion();
        }
    }

    /**
     * Finaliza la enfermedad.
     *
     */
    public void finalizarEnfermedad() {
        EnfermedadYDiagnosticoAmbulatorio enfermedadYDiagnosticoAmbulatorio =
                (EnfermedadYDiagnosticoAmbulatorio)
                MiModeloTabla.recuperarObjetoDeTabla(
                EnfermedadYDiagnosticoAmbulatorio.class.getName(),
                tablaEnfermedadYDiagnostico);

        /* Finaliza cuando es usuario autorizado, es paciente no fallecido y
           enfermedad activa */
        if (enfermedadYDiagnosticoAmbulatorio != null) {
            if (CapaPresentacion.modoCarga || CapaPresentacion.modoModificacion) {
                if (enfermedadYDiagnosticoAmbulatorio.getEstadoEnfermedadYDiagnosticoAmbulatorio().
                        equalsIgnoreCase("Activa")) {
                    EnfermedadYDiagnosticoAmbulatorioLogica.finalizarEnfermedad(
                            paciente, enfermedadYDiagnosticoAmbulatorio);

                    cargarTablaEnfermedadYDiagnosticoAmbulatorio();
                    MiModeloTabla.seleccionarFilaDeTabla(
                            String.valueOf(
                            enfermedadYDiagnosticoAmbulatorio.getIdEnfermedadYDiagnosticoAmbulatorio()),
                            tablaEnfermedadYDiagnostico, tablaEnfermedadYDiagnosticoScrollPanel);

                    cargarDescripcionEvolucion();
                } else {
                    MensajePresentacion.informarEntidadNoActiva(
                            enfermedadYDiagnosticoAmbulatorio);
                }
            } else {
                //Si no tiene acceso y se trata de una evolución de enfermedad
                MensajePresentacion.informarUsuarioRestringido();
            }
        } 
    }

    /**
     * Finaliza la internción agregando la epicrisis.
     *
     */
    public void epicrisisInternacion() {
        DiagnosticoYTriageInternacion diagnosticoYTriageInternacion =
                (DiagnosticoYTriageInternacion)
                MiModeloTabla.recuperarObjetoDeTabla(
                DiagnosticoYTriageInternacion.class.getName(),
                tablaEnfermedadYDiagnostico);

        if (diagnosticoYTriageInternacion != null) {
            RestriccionAcceso.EpicrisisInternacionPresentacion(null, true,
                    diagnosticoYTriageInternacion);

            //Si se completó correctamente la Epicrisis
            if (EpicrisisInternacionPresentacion.getCie9mcSeleccionado() != null) {
                cargarTablaDiagnosticoYTriageInternacion();

                MiModeloTabla.seleccionarFilaDeTabla(String.valueOf(
                        diagnosticoYTriageInternacion.getIdDiagnosticoYTriageInternacion()),
                        tablaEnfermedadYDiagnostico, tablaEnfermedadYDiagnosticoScrollPanel);

                cargarTablaEvolucionInternacion();
                cargarDescripcionEvolucion();
            }
        }
    }

    /**
     * Agrega una interconsulta a una enfermedad o a un diagnóstico y triage
     * segun corresponda.
     */
    public void interconsulta() {
        if (esAmbulatorio()) {
            EnfermedadYDiagnosticoAmbulatorio enfermedadYDiagnosticoAmbulatorio =
                    (EnfermedadYDiagnosticoAmbulatorio)
                    MiModeloTabla.recuperarObjetoDeTabla(
                    EnfermedadYDiagnosticoAmbulatorio.class.getName(),
                    tablaEnfermedadYDiagnostico);
            
            if (enfermedadYDiagnosticoAmbulatorio != null) {
                RestriccionAcceso.InterconsultaPresentacion(null, true,
                        enfermedadYDiagnosticoAmbulatorio, null);
            }
        } else {
            DiagnosticoYTriageInternacion diagnosticoYTriageInternacion =
                    (DiagnosticoYTriageInternacion)
                    MiModeloTabla.recuperarObjetoDeTabla(
                    DiagnosticoYTriageInternacion.class.getName(),
                    tablaEnfermedadYDiagnostico);

            if (diagnosticoYTriageInternacion != null) {
                RestriccionAcceso.InterconsultaPresentacion(null, true,
                        null, diagnosticoYTriageInternacion);
            }
        }
    }

    /**
     * Abre el detalle de la evolución.
     *
     */
    public void propiedadesEvolucion() {
        Evolucion evolucion = (Evolucion) MiModeloTabla.recuperarObjetoDeTabla(
                    Evolucion.class.getName(), tablaEvolucion);

        if (evolucion != null) {
            RestriccionAcceso.EvolucionPresentacion(null, true,
                    evolucion.getEnfermedadYDiagnosticoAmbulatorio(),
                    evolucion.getDiagnosticoYTriageInternacion(), evolucion);

            if (esAmbulatorio()) {
                //Si se agregó la evolución
                if (EvolucionPresentacion.getEvolucion() != null) {

                    cargarTablaEvolucionAmbulatorio();

                    MiModeloTabla.seleccionarFilaDeTabla(
                            String.valueOf(EvolucionPresentacion.
                            getEvolucion().getIdEvolucion()),
                            tablaEvolucion, tablaEvolucionScrollPanel);

                    cargarDescripcionEvolucion();
                }
            } else {
                //Si se agregó la evolución
                if (EvolucionPresentacion.getEvolucion() != null ||
                        EvolucionPresentacion.getEvolucion().
                        getDiagnosticoYTriageInternacion() != null) {

                    cargarTablaEvolucionInternacion();

                    MiModeloTabla.seleccionarFilaDeTabla(
                            String.valueOf(EvolucionPresentacion.
                            getEvolucion().getIdEvolucion()),
                            tablaEvolucion, tablaEvolucionScrollPanel);

                    cargarDescripcionEvolucion();
                }
            }
        }
    }

    public void propiedadesEvolucionEnfermeriaDeInternacion() {
         EvolucionEnfermeriaDeInternacion evolucionEnfermeriaDeInternacion = (EvolucionEnfermeriaDeInternacion) MiModeloTabla.
                recuperarObjetoDeTabla(EvolucionEnfermeriaDeInternacion.class.getName(), tablaEnfermeria);
            if (evolucionEnfermeriaDeInternacion != null) {
                    RestriccionAcceso.EvolucionEnfermeriaDeInternacion(
                        null, true, evolucionEnfermeriaDeInternacion.getDiagnosticoYTriageInternacion(),
                        evolucionEnfermeriaDeInternacion);

                    cargarTablaEnfermeriaInternacion();
                    MiModeloTabla.seleccionarFilaDeTabla(
                            String.valueOf(evolucionEnfermeriaDeInternacion.
                            getIdEvolucionEnfermeriaDeInternacion()), tablaEnfermeria,
                            tablaEnfermeriaScrollPanel);
                    cargarDescripcionEnfermeria();
                }
    }

    /**
     * Agrega una evolucion a la enfermedad/internación.
     *
     */
    public void agregarEvolucion() {
        if (esAmbulatorio()) {
            agregarEvolucionAmbulatorio();
        } else {
            agregarEvolucionInternacion();
        }
    }

    /**
     * Agrega una evolución ambulatorio a la enfermedad seleccionada.
     *
     */
    public void agregarEvolucionAmbulatorio() {
        EnfermedadYDiagnosticoAmbulatorio enfermedadYDiagnosticoAmbulatorio =
                (EnfermedadYDiagnosticoAmbulatorio)
                MiModeloTabla.recuperarObjetoDeTabla(
                EnfermedadYDiagnosticoAmbulatorio.class.getName(),
                tablaEnfermedadYDiagnostico);

        if (enfermedadYDiagnosticoAmbulatorio != null) {
            
            RestriccionAcceso.EvolucionPresentacion(null, true,
                    enfermedadYDiagnosticoAmbulatorio, null, null);
            //Si se agregó la evolución
            if (EvolucionPresentacion.getEvolucion() != null) {

                cargarTablaEvolucionAmbulatorio();

                MiModeloTabla.seleccionarFilaDeTabla(
                        String.valueOf(EvolucionPresentacion.
                        getEvolucion().getIdEvolucion()),
                        tablaEvolucion, tablaEvolucionScrollPanel);

                cargarDescripcionEvolucion();
            }
        }
    }

    /**
     * Agrega una evolución a la internación seleccionada.
     *
     */
    public void agregarEvolucionInternacion() {
        DiagnosticoYTriageInternacion diagnosticoYTriageInternacion =
                (DiagnosticoYTriageInternacion)MiModeloTabla.recuperarObjetoDeTabla(
                DiagnosticoYTriageInternacion.class.getName(),
                tablaEnfermedadYDiagnostico);

        if (diagnosticoYTriageInternacion != null) {
            
            RestriccionAcceso.EvolucionPresentacion(null, true, null,
                    diagnosticoYTriageInternacion, null);
            //Si se agregó la evolución
            if (EvolucionPresentacion.getEvolucion() != null &&
                    EvolucionPresentacion.getEvolucion().
                    getDiagnosticoYTriageInternacion() != null) {

                cargarTablaEvolucionInternacion();

                MiModeloTabla.seleccionarFilaDeTabla(
                        String.valueOf(EvolucionPresentacion.
                        getEvolucion().getIdEvolucion()),
                        tablaEvolucion, tablaEvolucionScrollPanel);

                cargarDescripcionEvolucion();
            }
        }
    }

    /**
     * Agrega una evolución enfermeria de internacion a la internación seleccionada.
     *
     */
    public void agregarEvolucionEnfermeriaDeInternacion() {
        DiagnosticoYTriageInternacion diagnosticoYTriageInternacion =
                (DiagnosticoYTriageInternacion) MiModeloTabla.recuperarObjetoDeTabla(
                DiagnosticoYTriageInternacion.class.getName(),
                tablaEnfermedadYDiagnostico);

        if (diagnosticoYTriageInternacion != null) {
            RestriccionAcceso.EvolucionEnfermeriaDeInternacion(
                    null, true, diagnosticoYTriageInternacion, null);
            //Si se agregó la evolución
            EvolucionEnfermeriaDeInternacion evolucionEnfermeriaDeInternacion =
                    EvolucionEnfermeriaDeInternacionPresentacion.getEvolucionEnfermeriaDeInternacion();
            if (evolucionEnfermeriaDeInternacion != null) {

                cargarTablaEnfermeriaInternacion();
                MiModeloTabla.seleccionarFilaDeTabla(
                        String.valueOf(evolucionEnfermeriaDeInternacion.
                        getIdEvolucionEnfermeriaDeInternacion()), tablaEnfermeria,
                        tablaEnfermeriaScrollPanel);
                cargarDescripcionEnfermeria();
            }
        }
    }

    /**
     * Muestra un listado de evoluciones enfermeria de internacion a la internación seleccionada.
     *
     */
    public void verEvolucionEnfermeriaDeInternacion() {
        DiagnosticoYTriageInternacion diagnosticoYTriageInternacion =
                (DiagnosticoYTriageInternacion)MiModeloTabla.recuperarObjetoDeTabla(
                DiagnosticoYTriageInternacion.class.getName(),
                tablaEnfermedadYDiagnostico);

        if (diagnosticoYTriageInternacion != null) {
            cargarDescripcionEnfermeria();
        }

    }

    /**
     * Agrega/modifica un tratamiento medicamentoso farmacológico y no
     * farmacológico a la evolución seleccionada.
     *
     */
    public void tratamientoMedicamentoso() {
        Evolucion evolucion = (Evolucion) MiModeloTabla.recuperarObjetoDeTabla(
                    Evolucion.class.getName(), tablaEvolucion);

        if (esAmbulatorio()) {
            if (evolucion != null) {
                RestriccionAcceso.TratamientoMedicamentosoPresentacion(
                        null, true, evolucion);

                MiModeloTabla.seleccionarFilaDeTabla(
                        String.valueOf(evolucion.getIdEvolucion()),
                        tablaEvolucion, tablaEvolucionScrollPanel);
            }
        } else {
            if (evolucion != null) {
                RestriccionAcceso.TratamientoMedicamentosoPresentacion(
                        null, true, evolucion);

                MiModeloTabla.seleccionarFilaDeTabla(
                        String.valueOf(evolucion.getIdEvolucion()),
                        tablaEvolucion, tablaEvolucionScrollPanel);
            }
        }
    }

    /**
     * Abre los Examenes Complementarios del paciente.
     *
     */
    public void examenComplementarioPaciente() {
        RestriccionAcceso.ExamenComplementarioPresentacion(null, true);
    }

    /**
     * Abre los Tratamientos y Prácticas del paciente.
     *
     */
    public void tratamientoYPracticaInternacion() {
        DiagnosticoYTriageInternacion diagnosticoYTriageInternacion =
                (DiagnosticoYTriageInternacion)MiModeloTabla.recuperarObjetoDeTabla(
                DiagnosticoYTriageInternacion.class.getName(),
                tablaEnfermedadYDiagnostico);

        if (diagnosticoYTriageInternacion != null) {
            RestriccionAcceso.TratamientoYPracticaPresentacion(null,
                true, diagnosticoYTriageInternacion);
        }
    }

    /**
     * lista segun corresponde el historial de interconsulta, ya sea
     * para ambulatorio o para internación.
     */
    public void interconsultaHistorial() {
        RestriccionAcceso.InterconsultaPresentacion(null, true, null, null);
    }

    /**
     * Abre los tratamientos del paciente.
     *
     */
    public void tratamientoFarmacologicoHistorial() {
        RestriccionAcceso.HistorialTratamientoMedicamentosoPresentacion(
                null, true);
    }

    /**
     * Abre los eventos del paciente.
     *
     */
    public void eventos() {
        RestriccionAcceso.EventosPresentacion(null, true);
    }

    /**
     * Setea en cada componente del JDialog los eventos que capturarán la tecla
     * enter y escape.
     * 
     */
    private void setearEventosQueCapturanTeclaEnterYEscape() {
        //Declaración del evento a capturar
        KeyListener keyListenerEscape = new KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                if (evt.getKeyCode() == KeyEvent.VK_ESCAPE) {
                    //Llamada al método que capturará el boton enter y
                    //trabajará sobre el mismo
                    dispose();
                }
            }
        };
        //Setear eventos
        tablaEnfermedadYDiagnostico.
                addKeyListener(keyListenerEscape);
        tablaEvolucion.addKeyListener(
                keyListenerEscape);
        
        botonAmbulatorio.addKeyListener(keyListenerEscape);
        botonInternacion.addKeyListener(keyListenerEscape);

        filtrarEnfermedad.addKeyListener(keyListenerEscape);
        filtrarEvolucion.addKeyListener(keyListenerEscape);

        botonAgregarEnfermedad.addKeyListener(keyListenerEscape);
        botonAgregarEvolucion.addKeyListener(keyListenerEscape);

        botonDescripcionEvolucionAnterior.addKeyListener(keyListenerEscape);
        botonDescripcionEvolucionSiguiente.addKeyListener(keyListenerEscape);
    }

    /**
     * Retorna el paciente que se está gestionando actualmente.
     * 
     * @return El objeto Paciente
     */
    public static Paciente getPaciente() {
        return paciente;
    }
    
    /**
     * Retorna si esta en modo Ambulatorio.
     *
     * @return true si es Ambulatorio, false si es Internación
     */
    public static boolean esAmbulatorio() {
        return botonAmbulatorio.isSelected();
    }

    /**
     * Dado un paciente verifica si su ficha de mortalidad ha sido cargada.
     *
     * @param paciente El paciente a consultar
     * @return true si ha fallecido, false en caso contrario
     */
    public static boolean esPacienteFallecido() {
        if (paciente == null) {
            return false;
        } else {
            return paciente.getFichaMortalidad() != null;
        }
    }
	
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton botonAgregarEnfermedad;
    private javax.swing.JButton botonAgregarEnfermeria;
    private javax.swing.JButton botonAgregarEvolucion;
    private static javax.swing.JToggleButton botonAmbulatorio;
    private javax.swing.JButton botonDescripcionEvolucionAnterior;
    private javax.swing.JButton botonDescripcionEvolucionSiguiente;
    private javax.swing.JToggleButton botonInternacion;
    private javax.swing.JEditorPane descripcionEvolucion;
    private javax.swing.JScrollPane descripcionEvolucionScrollPanel;
    private javax.swing.JTextField filtrarEnfermedad;
    private javax.swing.JTextField filtrarEnfermeria;
    private javax.swing.JTextField filtrarEvolucion;
    private javax.swing.JLabel nombreYApellidoPaciente;
    private javax.swing.JPanel panelEnfermeria;
    private javax.swing.JPanel panelVisualizador;
    private javax.swing.JSeparator separador1;
    private javax.swing.JTable tablaEnfermedadYDiagnostico;
    private javax.swing.JScrollPane tablaEnfermedadYDiagnosticoScrollPanel;
    private javax.swing.JTable tablaEnfermeria;
    private javax.swing.JScrollPane tablaEnfermeriaScrollPanel;
    private javax.swing.JTable tablaEvolucion;
    private javax.swing.JScrollPane tablaEvolucionScrollPanel;
    private javax.swing.JLabel textoEnfermedadYDiagnostico;
    private javax.swing.JLabel textoEnfermeria;
    private javax.swing.JLabel textoEvolucion;
    private javax.swing.JLabel textoFiltrarEnfermedad;
    private javax.swing.JLabel textoFiltrarEnfermeria;
    private javax.swing.JLabel textoFiltrarEvolucion;
    // End of variables declaration//GEN-END:variables
    private static Paciente paciente;
}